import { defineConfig, loadEnv, UserConfigExport } from 'vite';
import { resolve } from 'path';
import vue from '@vitejs/plugin-vue';
import cesium from 'vite-plugin-cesium';
import autoImport from 'unplugin-auto-import/vite';

const ENV_DIR = './env';
const BASE_CONFIG: UserConfigExport = {
  plugins: [
    vue(),
    cesium({ rebuildCesium: true }),
    autoImport({
      include: [/\.[tj]sx?$/, /\.vue$/, /\.vue\?vue/],
      imports: ['vue', 'vue-router', 'pinia'],
      // 生成 eslint 全局变量定义配置。
      eslintrc: {
        enabled: true,
        filepath: './env/.eslintrc-auto-import.json',
        globalsPropValue: 'readonly',
      },
      // 生成 TypeScript 全局变量定义配置。
      dts: './env/auto-imports.d.ts',
    }),
  ],
  resolve: {
    alias: {
      '@': resolve(__dirname, 'src'),
      '@assets': resolve(__dirname, 'src/assets'),
      '@comps': resolve(__dirname, 'src/components'),
      '@types': resolve(__dirname, 'src/types'),
      '@utils': resolve(__dirname, 'src/utils'),
      '@examples': resolve(__dirname, 'src/examples'),
      '@views': resolve(__dirname, 'src/views'),
    },
    extensions: ['.js', '.json', '.jsx', '.ts', '.tsx'],
  },
  css: {
    postcss: './env/postcss.config.cjs',
  },
  envDir: ENV_DIR,
};

export default defineConfig(({ mode }) => {
  if (mode === 'production') {
    const env = loadEnv('production', ENV_DIR);
    return {
      ...BASE_CONFIG,
      // 生产模式下，读取配置文件确定构建路径。
      base: env.VITE_BASE || '/',
      build: {
        outDir: env.VITE_OUT_DIR || 'dist',
      },
    };
  }

  // 其他模式下直接返回默认配置。
  return BASE_CONFIG;
});
